class Vertice:
    def __init__(self, indice, duracao, predecessores):
        self.indice = indice # Índice. Baseado meramente na quantidade de vértices.
        self.predecessores = predecessores
        self.sucessores = []
        self.duracao = duracao        # duração da tarefa.

        # Os atributos atuais serão inicializados com zero, mas serão setados posteriormente.
        self.inicioCedo = 0     # o valor mais alto de fimCedo dentre os predecessores imediatos. (ida)
        self.fimCedo = 0        # inicioCedo + duração. (ida)
        self.inicioTardio = 0   # fimTardio - duração. (volta)
        self.fimTardio = 0      # valor mais baixo de inicioTardio dentre os sucessores imediatos. (volta)
        self.folga = -100       # Será calculada posteriormente.
        
    def addSucessor(self,vertice):
        self.sucessores.append(vertice)

    def calculaFolga(self):
        # Em todos os testes, as duas operações abaixo resultam no mesmo valor. Então, tanto faz.
        self.folga = self.inicioTardio - self.inicioCedo
        self.folga = self.fimTardio - self.fimCedo

    def getFolga(self):
        return self.folga

    def getDuracao(self):
        return self.duracao

    def getPredecessores(self):
        return self.predecessores

    def getSucessores(self):
        return self.sucessores

    def getIndice(self):
        return self.indice

    def getInicioCedo(self):
        return self.inicioCedo

    def getFimCedo(self):
        return self.fimCedo

    def getInicioTardio(self):
        return self.inicioTardio

    def getFimTardio(self):
        return self.fimTardio

    def setInicioCedo(self, newInicioCedo):
        self.inicioCedo = newInicioCedo

    def setFimCedo(self, newFimCedo):
        self.fimCedo = newFimCedo

    def setInicioTardio(self, newInicioTardio):
        self.inicioTardio = newInicioTardio

    def setFimTardio(self, newFimTardio):
        self.fimTardio = newFimTardio